package com.billdowney.qq.robot.plugins.provide.baidu.access;

import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Optional;

/**
 * token请求返回数据
 *
 * @author BillDowney
 */
@Data
public class AccessTokenResponse {

    /**
     * 访问凭证
     */
    @JsonProperty("access_token")
    private String accessToken;
    /**
     * 有效期，Access Token的有效期。
     * 说明：单位是秒，有效期30天
     */
    @JsonProperty("expires_in")
    private Integer expiresIn;
    /**
     * 错误码
     * 说明：响应失败时返回该字段，成功时不返回
     */
    @JsonProperty("error")
    private String error;
    /**
     * 错误描述信息，帮助理解和解决发生的错误
     * 说明：响应失败时返回该字段，成功时不返回
     */
    @JsonProperty("error_description")
    private String errorDescription;
    /**
     * 暂时未使用，可忽略
     */
    @JsonProperty("session_key")
    private String sessionKey;
    /**
     * 暂时未使用，可忽略
     */
    @JsonProperty("refresh_token")
    private String refreshToken;
    /**
     * 暂时未使用，可忽略
     */
    @JsonProperty("scope")
    private String scope;
    /**
     * 暂时未使用，可忽略
     */
    @JsonProperty("session_secret")
    private String sessionSecret;
    /**
     * 获取token的时间，用于计算过期
     */
    private Long createTime;

    public boolean success() {
        return StrUtil.isBlank(this.error);
    }

    /**
     * 是否过期
     */
    public boolean isExpire() {
        return System.currentTimeMillis() < (Optional.ofNullable(this.createTime).orElse(0L) + this.expiresIn * 1000);
    }

}
